﻿using Microsoft.AspNetCore.Mvc;
using MVC高级教程.Service;

namespace MVC高级教程.Controllers
{
    /// <summary>
    /// Httpcontext类型，是请求上下文
    /// 所谓的请求上下文，就是交代了当前请求的环境信息，当前请求你上下文中包含了你的请求信息(Request) 与请求响应(Response)，请求上下文就是交代了请求的来龙去脉。
    /// 
    /// </summary>
    public class HttpContextController : Controller
    {
        #region 构造函数依赖注入
            private readonly ILogger<HttpContextController> _logger;
            private readonly IStudentService _studentService;

            public HttpContextController(ILogger<HttpContextController> logger, IStudentService studentService)
            {
                _logger = logger;
                _studentService = studentService;
            }
        #endregion


        public IActionResult Index()
        {
            //在控制器中使可以直接的访问请求的上下文的
            HttpContext.Response.StatusCode = 200;//HttpContext.Response属性返回的是Response类型对象，所以，HttpContext.Response 与Response是等效的
            HttpContext.Request.Method="GET";//(同上)  HttpContext.Request 与 Request等效

            //大家一定要注意
            //但凡是要创建对象，优先从IOC容器中拿，这样可以不用考虑它创建的过程需要什么构造参数
            //只有创建Model(视图Model，DataModel)我们才可以使用new的方式来创建对象
            //像创建服务，创建控制器对象，创建Razor视图对象，创建数据访问层Repository对象，等等...都要考虑以依赖注入的方式创建(从IOC容器中拿)

            //_studentService.Save();

            return View();
        }


        /// <summary>
        /// HttpContext对象提供一下属性：
        ///         ①、Request：获取当前的请求对象
        ///         ②、RequestService：获取或设置 IServiceProvider接口，提供对请求的服务容器的访问权限。
        ///         ③、Response: 获取请求的响应对象，表示单个Http请求的传出端
        ///         ④、Session:  获取获设置当前请求用户的服务器会话对象
        ///         ⑤、User:     获取或设置当前请求的用户对象
        /// </summary>
        /// <returns></returns>
        //public IActionResult Index2()
        //{
            
        //    HttpContext.RequestServices.GetService<I>
        //}
    }
}
